#pragma once

#include "../ScriptHook/Scripting.h"

namespace Scripting
{
	static void SetCarVisible(Vehicle p0, b8 p1) { NativeInvoke::Invoke<ScriptVoid>("SET_CAR_VISIBLE", p0, p1); }

	static void AttachObjectToCar(Object p0, Vehicle p1, u32 p2, f32 p3, f32 p4, f32 p5, f32 p6, f32 p7, f32 p8){ NativeInvoke::Invoke<ScriptVoid>("ATTACH_OBJECT_TO_CAR", p0, p1, p2, p3, p4, p5, p6, p7, p8);}

	static void SetTextScale(f32 p0, f32 p1) { NativeInvoke::Invoke<ScriptVoid>("SET_TEXT_SCALE", p0, p1); }

	static void SetTextFont(u32 p0) { NativeInvoke::Invoke<ScriptVoid>("SET_TEXT_FONT", p0); }

	static f32 GetStringWidthWithString(ch *gxt, ch* text) { return NativeInvoke::Invoke<f32>("GET_STRING_WIDTH_WITH_STRING", gxt,text); }

	static void SetCharCoordinates(Ped p0, f32 p1, f32 p2, f32 p3) { NativeInvoke::Invoke<ScriptVoid>("SET_CHAR_COORDINATES", p0, p1, p2, p3); }

	static void GetCamRot(Cam p0, f32 *p1, f32 *p2, f32 *p3) { NativeInvoke::Invoke<ScriptVoid>("GET_CAM_ROT", p0, p1, p2, p3); }

	static void GetCamPos(Cam p0, f32 *p1, f32 *p2, f32 *p3) { NativeInvoke::Invoke<ScriptVoid>("GET_CAM_POS", p0, p1, p2, p3); }

	static void GetRootCam(Cam *p0) { NativeInvoke::Invoke<ScriptVoid>("GET_ROOT_CAM", p0); }

	static void GetGameCam(Cam *p0) { NativeInvoke::Invoke<ScriptVoid>("GET_GAME_CAM", p0); }

	static void SetGameCamPitch(f32 p0) { NativeInvoke::Invoke<ScriptVoid>("SET_GAME_CAM_PITCH", p0); }

	static void CreateCam(u32 p0, Cam *p1) { NativeInvoke::Invoke<ScriptVoid>("CREATE_CAM", p0, p1); }
	static void SetCamPos(Cam p0, f32 p1, f32 p2, f32 p3) { NativeInvoke::Invoke<ScriptVoid>("SET_CAM_POS", p0, p1, p2, p3); }
	static void SetCamRot(Cam p0, f32 p1, f32 p2, f32 p3) { NativeInvoke::Invoke<ScriptVoid>("SET_CAM_ROT", p0, p1, p2, p3); } //floats from -180 to 180 (degree)
	static ScriptAny IsCamActive(Cam p0) { return NativeInvoke::Invoke<ScriptAny>("IS_CAM_ACTIVE", p0); }
	static void SetCamActive(Cam p0, b8 p1) { NativeInvoke::Invoke<ScriptVoid>("SET_CAM_ACTIVE", p0, p1); }

	static void SetCharHeading(Ped p0, f32 p1) { NativeInvoke::Invoke<ScriptVoid>("SET_CHAR_HEADING", p0, p1); }

	static void SetVehicleQuaternion(Car p0, f32 p1, f32 p2, f32 p3, f32 p4) { NativeInvoke::Invoke<ScriptVoid>("SET_VEHICLE_QUATERNION", p0, p1, p2, p3, p4); }

	static void GrabNearbyObjectWithSpecialAttribute(b8 p0, Object *p1) { NativeInvoke::Invoke<ScriptVoid>("GRAB_NEARBY_OBJECT_WITH_SPECIAL_ATTRIBUTE", p0, p1); }

	static void SetObjectCoordinates(Object p0, f32 p1, f32 p2, f32 p3) { NativeInvoke::Invoke<ScriptVoid>("SET_OBJECT_COORDINATES", p0, p1, p2, p3); }

	static void SetObjectRotation(Object p0, f32 p1, f32 p2, f32 p3) { NativeInvoke::Invoke<ScriptVoid>("SET_OBJECT_ROTATION", p0, p1, p2, p3); }

	static void AttachCarToObject(Car p0, Object p1, b8 p2, f32 p3, f32 p4, f32 p5, f32 p6, f32 p7, f32 p8) { NativeInvoke::Invoke<ScriptVoid>("ATTACH_CAR_TO_OBJECT", p0, p1, p2, p3, p4, p5, p6, p7, p8); }
	static void TaskSitDownOnNearestObject(ScriptAny p0, ScriptAny p1, ScriptAny p2, ScriptAny p3, ScriptAny p4,ScriptAny p5, ScriptAny p6, ScriptAny p7, ScriptAny p8, ScriptAny p9) { NativeInvoke::Invoke<ScriptVoid>("TASK_SIT_DOWN_ON_NEAREST_OBJECT", p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); }

}